﻿Public Class MMC

    Dim contadorAsignaciones As Integer = 1
    Dim ultimaFila As Integer = 1000
    Dim ultimaColumna As Integer = 1000
    Dim ultimaIteracion As Boolean = False

    Public Sub obtenerMenorCosto()
        Dim menorCosto As Integer = 1000
        grupbox1.empresas = Integer.Parse(grupbox1.NumEmpresas.Text)
        grupbox1.bodegas = Integer.Parse(grupbox1.NumBodegas.Text)
        Dim produccion As Integer = 0
        Dim espacio As Integer = 0
        For i As Integer = 1 To grupbox1.empresas
            For j As Integer = 1 To grupbox1.bodegas
                'recorrido obteniendo el menor costo de la matriz
                    For Each elemento As Control In grupbox1.splitContainer1.Panel1.Controls
                        If elemento.Name = "Panel" & i & j Then
                        If menorCosto > Integer.Parse(elemento.Controls.Item(2).Text) And elemento.Enabled = True Then
                            menorCosto = Integer.Parse(elemento.Controls.Item(2).Text)
                            ultimaFila = i
                            ultimaColumna = j
                        End If

                        End If
                    Next
            Next
        Next
        'MsgBox("fila" & ultimaFila & "columna" & ultimaColumna & "costo" & menorCosto)
    End Sub
    Public Sub juguemosMMC()
        Dim produccion, espacio As Integer
        ''MsgBox("La asignacion" & contadorAsignaciones)
        'ver cuando se reinicia hay un error
        If contadorAsignaciones > grupbox1.empresas + grupbox1.bodegas - 1 Then
            PanelAMatriz()
            ''MsgBox("termino")

        Else
            obtenerMenorCosto()
            For Each elemento As Control In grupbox1.splitContainer1.Panel1.Controls
                If elemento.Name = "Panel" & ultimaFila & ultimaColumna Then

                    For Each label As Control In grupbox1.splitContainer1.Panel1.Controls
                        If label.Name = "UpDown" & ultimaFila & 1 Then
                            produccion = label.Text
                        End If
                        If label.Name = "UpDow" & 1 & ultimaColumna Then
                            espacio = label.Text
                        End If
                    Next
                    'MsgBox(produccion & "." & espacio)
                    If produccion = 0 Then
                        elemento.Enabled = False
                        contadorAsignaciones -= 1
                    ElseIf espacio = 0 Then
                        elemento.Enabled = False
                        contadorAsignaciones -= 1
                        ' hacer que vaya matando las filas o las columas cuando se vaya a realizar la asignacion 0
                    ElseIf produccion < espacio Then
                        elemento.Controls.Item(1).Text = produccion
                        For Each label As Control In grupbox1.splitContainer1.Panel1.Controls
                            If label.Name = "UpDown" & ultimaFila & 1 Then
                                label.Text = 0
                            ElseIf label.Name = "UpDow" & 1 & ultimaColumna Then
                                label.Text = label.Text - produccion
                            End If
                        Next
                        elemento.Enabled = False
                    ElseIf produccion > espacio Then
                        elemento.Controls.Item(1).Text = espacio
                        elemento.Enabled = False
                        For Each label As Control In grupbox1.splitContainer1.Panel1.Controls
                            If label.Name = "UpDown" & ultimaFila & 1 Then
                                label.Text = label.Text - espacio
                            ElseIf label.Name = "UpDow" & 1 & ultimaColumna Then
                                label.Text = 0
                            End If
                        Next
                    ElseIf produccion = espacio Then
                        elemento.Controls.Item(1).Text = espacio
                        elemento.Enabled = False
                        For Each label As Control In grupbox1.splitContainer1.Panel1.Controls
                            If label.Name = "UpDown" & ultimaFila & 1 Then
                                label.Text = 0
                            ElseIf label.Name = "UpDow" & 1 & ultimaColumna Then
                                label.Text = 0
                            End If
                        Next
                        'este es el caso especial cuando la produccion es igual al espacio en la ultima 
                        'interaccion
                        If contadorAsignaciones > grupbox1.empresas + grupbox1.bodegas - 2 Then
                            elemento.Controls.Item(1).Text = espacio
                            ultimaIteracion = True
                            elemento.Enabled = False
                        End If


                        'IMPORTANTE caso especial cuando ya se asignó abajo o arriba y ese panel ya se encuentra bloqueado
                        If ultimaFila = grupbox1.empresas Then
                            ''caso especial cuando toca en la última fila y se debe asignar arriba el 0
                            If ultimaIteracion = False Then
                                'pone el 0 arriba
                                For Each paneles As Control In grupbox1.splitContainer1.Panel1.Controls
                                    If paneles.Name = "Panel" & ultimaFila - 1 & ultimaColumna Then
                                        If paneles.Enabled = True Then
                                            paneles.Controls.Item(1).Text = 0
                                            paneles.Enabled = False
                                            contadorAsignaciones += 1
                                        Else
                                            'si el panel ya está asignado'
                                            For Each panelAuxiliar As Control In grupbox1.splitContainer1.Panel1.Controls
                                                If panelAuxiliar.Name = "Panel" & ultimaFila + 1 & ultimaColumna Then
                                                    If panelAuxiliar.Enabled = True Then
                                                        panelAuxiliar.Controls.Item(1).Text = 0
                                                        panelAuxiliar.Enabled = False
                                                        contadorAsignaciones += 1

                                                    End If
                                                End If
                                            Next

                                        End If
                                    End If
                                Next
                            End If
                        Else
                            ''pone el 0 abajo
                            If ultimaIteracion = False Then
                                For Each paneles As Control In grupbox1.splitContainer1.Panel1.Controls
                                    If paneles.Name = "Panel" & ultimaFila + 1 & ultimaColumna Then
                                        If paneles.Enabled = True Then
                                            paneles.Controls.Item(1).Text = 0
                                            paneles.Enabled = False
                                            contadorAsignaciones += 1
                                        Else
                                            'si el panel ya está asignado'
                                            For Each panelAuxiliar As Control In grupbox1.splitContainer1.Panel1.Controls
                                                If panelAuxiliar.Name = "Panel" & ultimaFila - 1 & ultimaColumna Then
                                                    If panelAuxiliar.Enabled = True Then
                                                        panelAuxiliar.Controls.Item(1).Text = 0
                                                        panelAuxiliar.Enabled = False
                                                        contadorAsignaciones += 1

                                                    End If
                                                End If
                                            Next
                                        End If
                                    End If
                                Next
                            End If
                        End If
                    End If
                End If
            Next
            contadorAsignaciones += 1
            juguemosMMC()
        End If

        For i = 1 To grupbox1.empresas
            For j = 1 To grupbox1.bodegas
                For Each Control As Control In grupbox1.splitContainer1.Panel1.Controls
                    If Control.Name = "Panel" & i & j Then
                        Control.Enabled = True
                    End If
                Next
            Next
        Next
    End Sub
    
End Class
